﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.Codigo;
using SIIE_ERP.View;
using SIIE_ERP.BaseDatos.Configuracion.Empresa;
using System.Data;
using SIIE_ERP.BaseDatos;
using System.Drawing.Imaging;
using System.IO;

namespace Elysium.Demo.Configuracion.Empresa
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class InformacionGeneral : UserControl
    {
        private UsuarioActivo _sesion;
        private Int32 Id;

        public InformacionGeneral(ref UsuarioActivo usuario)
        {
            InitializeComponent();
            this._sesion = usuario;
            CargarDatos();
            CargarCombos();
        }

        private void CargarCombos()
        {
            ComboBoxUI.ComboRegimenFiscal(ref Combo_Regimen);
        }

        private void CargarDatos()
        {
            if(FuncionesClass.ConsultaFE(_sesion.RFC) == 1)
            {
                FactC_Button_Guardar_CBB.Visibility = System.Windows.Visibility.Hidden;
                FactC_ButtonCBB.Visibility = System.Windows.Visibility.Hidden;
                FactC_Label.Visibility = System.Windows.Visibility.Hidden;
                FactC_Label2.Visibility = System.Windows.Visibility.Hidden;
                FactC_Label3.Visibility = System.Windows.Visibility.Hidden;
                FactC_root2.Visibility = System.Windows.Visibility.Hidden;
                FactC_TextBox_CBB.Visibility = System.Windows.Visibility.Hidden;
                FactC_TextBox_SICOFI.Visibility = System.Windows.Visibility.Hidden;                
            }

            ////////////////////////////////////////  General
            var db = new SIIE_ERP.BaseDatos.Configuracion.Empresa.dbo_Cat_Empresa(_sesion.RFC, _sesion.UserName);
            var empresa = db.Get_Empresas().Rows[0];
            
            var RazonSocial = empresa["Razon_Social"].ToString();
            var Contacto = empresa["Nombre_Contacto"].ToString();
            var Puesto = empresa["Puesto_Contacto"].ToString();
            var Telefono = empresa["Telefono_Contacto"].ToString();
            var Correo = empresa["Correo_Contacto"].ToString();

            Id = Int32.Parse(empresa["Id_Empresa"].ToString());
            CampoRazonSocial.Text = RazonSocial;
            CampoContacto.Text = Contacto;
            CampoPuesto.Text = Puesto;
            CampoTelefono.Text = Telefono;
            CampoCorreoElectronico.Text = Correo;

            dbo_Cat_Empresa_Datos_Factura Fact_Conv = new dbo_Cat_Empresa_Datos_Factura(_sesion.RFC, _sesion.UserName);
            DataTable Datos_Fact_Conv = Fact_Conv.Get_Empresa_Datos_Factura();

            ////////////////////////////////////////  Logo
            try
            {
                if (((byte[])Datos_Fact_Conv.Rows[0]["LogoFile"]).Length != 0)
                {
                    TextBox_LOGO.Text = "Usted ya ha ingresado el logo de su empresa.";
                }
            }
            catch(Exception)
            { 
            
            }
                        
            ////////////////////////////////////////  Régimen Fiscal
            Combo_Regimen.SelectedValue = Datos_Fact_Conv.Rows[0]["Id_Regimen_Fiscal"].ToString();

            ////////////////////////////////////////  Facturación Convencional
            FactC_TextBox_SICOFI.Text = Datos_Fact_Conv.Rows[0]["Aprobacion_SICOFI"].ToString();

            try
            {
                if (((byte[])Datos_Fact_Conv.Rows[0]["CBB"]).Length != 0)
                {
                    FactC_TextBox_CBB.Text = "Usted ya ha ingresado el CBB de su empresa.";
                }
            }
            catch (Exception)
            {

            }            
        }

        private void ButtonCancelar_Click(object sender, RoutedEventArgs e)
        {
            (this.Parent as ScrollViewer).Content = null;
        }

        private void ButtonGuardar_Click(object sender, RoutedEventArgs e)
        {
            var db = new SIIE_ERP.BaseDatos.Configuracion.Empresa.dbo_Cat_Empresa(_sesion.RFC, _sesion.UserName);

            if (db.Update_Empresa_Por_Id(Id, CampoRazonSocial.Text, CampoContacto.Text, CampoPuesto.Text,
                                        CampoTelefono.Text, CampoCorreoElectronico.Text, true).Id == 1)
            {
                MessageBox.Show("Datos actualizados correctamente.");
            }
            else
            {
                MessageBox.Show("Error al actualizar los datos");
            }            
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("InformacionGeneral.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }

        private void Button_Guardar_Regimen_Click_1(object sender, RoutedEventArgs e)
        {
            dbo_Cat_Empresa_Datos_Factura Fact_Conv = new dbo_Cat_Empresa_Datos_Factura(_sesion.RFC, _sesion.UserName);
            Respuesta r = Fact_Conv.Update_Empresa_Datos_Factura_RegimenFiscal(Combo_Regimen.SelectedValue.ToString());
            
            if (r.Id == 1)
                MessageBox.Show("Régimen Fiscal Modificado Correctamente.");
            else
                MessageBox.Show("Error.");
        }

        public string GetImageFilter()
        {
            StringBuilder allImageExtensions = new StringBuilder();
            string separator = "";
            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
            Dictionary<string, string> images = new Dictionary<string, string>();
            foreach (ImageCodecInfo codec in codecs)
            {
                allImageExtensions.Append(separator);
                allImageExtensions.Append(codec.FilenameExtension);
                separator = ";";
                images.Add(string.Format("{0} Files: ({1})", codec.FormatDescription, codec.FilenameExtension),
                           codec.FilenameExtension);
            }
            StringBuilder sb = new StringBuilder();
            if (allImageExtensions.Length > 0)
            {
                sb.AppendFormat("{0}|{1}", "All Images", allImageExtensions.ToString());
            }
            images.Add("All Files", "*.*");
            foreach (KeyValuePair<string, string> image in images)
            {
                sb.AppendFormat("|{0}|{1}", image.Key, image.Value);
            }
            return sb.ToString();
        }

        private void ButtonLOGO_Click_1(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

            dlg.Filter = GetImageFilter();

            // Muestra el Open File Dialog
            Nullable<bool> result = dlg.ShowDialog();

            // Obtiene el archivo
            if (result == true)
            {
                // Open document 
                string filename = dlg.FileName;
                TextBox_LOGO.Text = filename;
            }
        }

        private void Button_Guardar_Logo_Click_1(object sender, RoutedEventArgs e)
        {
            if (String.IsNullOrEmpty(TextBox_LOGO.Text) || TextBox_LOGO.Text.Equals("Usted ya ha ingresado el logo de su empresa."))
            {
                MessageBox.Show("Favor de seleccionar un archivo");
            }
            else
            {
                FileStream fs_LOGO = null;
                fs_LOGO = File.OpenRead(TextBox_LOGO.Text);
                byte[] bytes_LOGO = new byte[fs_LOGO.Length];
                fs_LOGO.Read(bytes_LOGO, 0, Convert.ToInt32(fs_LOGO.Length));

                string[] words = TextBox_LOGO.Text.Split('.');
                words.Count();

                if (bytes_LOGO.Length > 512000)
                {
                    MessageBox.Show("El archivo no ha podido guardarse por exceder el tamaño límite de 500 Kb");
                    return;
                }

                dbo_Cat_Empresa_Datos_Factura Fact_Conv = new dbo_Cat_Empresa_Datos_Factura(_sesion.RFC, _sesion.UserName);
                Respuesta r = Fact_Conv.Update_Empresa_Datos_Factura_LOGO(bytes_LOGO, words[words.Count()-1]);

                if (r.Id == 1)
                    MessageBox.Show("Registro editado correctamente");
                else
                    MessageBox.Show("Error");
            }  
        }

        private void ButtonCBB_Click_1(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

            dlg.Filter = GetImageFilter();

            // Muestra el Open File Dialog
            Nullable<bool> result = dlg.ShowDialog();

            // Obtiene el archivo
            if (result == true)
            {
                // Open document                 
                string filename = dlg.FileName;
                FactC_TextBox_CBB.Text = filename;
            }
        }

        private void Button_Guardar_CBB_Click_1(object sender, RoutedEventArgs e)
        {

            if (String.IsNullOrEmpty(FactC_TextBox_CBB.Text) || FactC_TextBox_CBB.Text.Equals("Usted ya ha ingresado el CBB de su empresa."))
            {
                MessageBox.Show("Favor de seleccionar un archivo");
            }
            else
            {
                FileStream fs_CBB = null;
                fs_CBB = File.OpenRead(FactC_TextBox_CBB.Text);
                byte[] bytes_CBB = new byte[fs_CBB.Length];
                fs_CBB.Read(bytes_CBB, 0, Convert.ToInt32(fs_CBB.Length));

                string[] words = FactC_TextBox_CBB.Text.Split('.');
                words.Count();

                if (bytes_CBB.Length > 512000)
                {
                    MessageBox.Show("El archivo no ha podido guardarse por exceder el tamaño límite de 500 Kb");
                    return;
                }

                try
                {
                    Int64 BigNum = Int64.Parse(FactC_TextBox_SICOFI.Text);
                }
                catch (Exception)
                {
                    MessageBox.Show("Favor de Ingresar un número de SICOFI Válido");
                    return;
                }

                dbo_Cat_Empresa_Datos_Factura Fact_Conv = new dbo_Cat_Empresa_Datos_Factura(_sesion.RFC, _sesion.UserName);
                Respuesta r = Fact_Conv.Update_Empresa_Datos_Factura_FacturacionConvencional(bytes_CBB, words[words.Count() - 1], FactC_TextBox_SICOFI.Text);
                
                if (r.Id == 1)
                    MessageBox.Show("Registro editado correctamente");
                else
                    MessageBox.Show("Error");
            }            
        }
    }
}
